/**
 * 
 */
package compilador.analizadorSintactico.categoriasSintacticas;

import java.util.ArrayList;

import javax.swing.tree.DefaultMutableTreeNode;

import compilador.analizadorSemantico.tablaSimbolos.TablaSimboloSemantico;

/**
 * @author Nolberto Castellanos Rodriguez
 * @author Yurani Alejandra Salamanca Lotero
 *
 * Clase que representa una inicializacion
 */
public class Inicializacion {
	
//	-------------------------------------------------------------------------------------------------
//	ATRIBUTOS
//	-------------------------------------------------------------------------------------------------
	
	/**
	 * Atributo que contiene las sentencias de asignacion de una inicializacion
	 */
	private ArrayList<SentenciaAsignacion> sentenciasAsignacion;

//	-------------------------------------------------------------------------------------------------
//	CONSTRUCTORES
//	-------------------------------------------------------------------------------------------------
	
	/**
	 * Constructor que permite crear una nueva inicializacion
	 * @param sentenciasAsignacion. contiene las sentencias de asignacion
	 */
	public Inicializacion(ArrayList<SentenciaAsignacion> sentenciasAsignacion) {
		super();
		this.setSentenciasAsignacion(sentenciasAsignacion);
	}
	
//	-------------------------------------------------------------------------------------------------
//	METODOS
//	-------------------------------------------------------------------------------------------------	
	
	/**
	 * Metodo que permite agregar hojas al nodo de la clase
	 * @return el nodo de la clase con sus hojas
	 */
	public  DefaultMutableTreeNode getArbolVisual(){
		DefaultMutableTreeNode miRaiz =  new  DefaultMutableTreeNode("Inicializacion");
		
		for (SentenciaAsignacion sentenciaAsignacion : sentenciasAsignacion) {
			miRaiz.add(sentenciaAsignacion.getArbolVisual());
		}
		
		return miRaiz;
	}

	/**
	 * @param ts
	 * @param errores
	 * @param claseActual
	 * @param metodoActual
	 */
	public void analizarSemantica(TablaSimboloSemantico ts,
			ArrayList<SimboloError> errores, String claseActual,
			String metodoActual) {
		if (sentenciasAsignacion != null) {
			for (SentenciaAsignacion sentencia : sentenciasAsignacion) {
				sentencia.AnalizarSemantica(ts, errores, claseActual, metodoActual);
			}
		}
		
	}
	
//	-------------------------------------------------------------------------------------------------
//	GETTERS & SETTERS
//	-------------------------------------------------------------------------------------------------
	
	/**
	 * Metodo que nos retorna el valor de sentenciasAsignacion
	 * @return  sentenciasAsignacion. Valor retornado
	 */
	public ArrayList<SentenciaAsignacion> getSentenciasAsignacion() {
		return sentenciasAsignacion;
	}

	/**
	 * Metodo que permite asignar el valor de sentenciasAsignacion
	 * @param sentenciasAsignacion. Valor a asignar sentenciasAsignacion
	 */
	public void setSentenciasAsignacion(ArrayList<SentenciaAsignacion> sentenciasAsignacion) {
		this.sentenciasAsignacion = sentenciasAsignacion;
	}

	/**
	 * @return
	 */
	public String getJavaCode() {
		String retornable = "";
		
		for (int i = 0; i < sentenciasAsignacion.size(); i++) {
			if(i>0)
				retornable+=",";
			
			retornable += sentenciasAsignacion.get(i).getJavaCode();
		}
		
		return retornable;
	}

}